/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package pessoas.CommandContatoView;

import java.io.IOException;
import javax.swing.JOptionPane;
import pessoas.collection.Contatos;
import pessoas.collection.Operadoras;
import pessoas.dataHora.DataHora;
import pessoas.interfaces.ICommandContatoView;
import pessoas.mementoContato.Contato;
import pessoas.model.Usuario;
import pessoas.presenter.ContatoPresenter;
import pessoas.presenter.stateContatoView.VisualizacaoState;

/**
 *
 * @author Bush
 */
public class EditarCommand implements ICommandContatoView {

    private DataHora dataHora;
    private ContatoPresenter presenter;
    private Contatos contatos;
    private Usuario usuario;
    private Contato contato;

    public EditarCommand(ContatoPresenter presenter, Contatos contatos, Usuario usuario, Contato contato) {
        dataHora = new DataHora();
        this.presenter = presenter;
        this.contatos = contatos;
        this.usuario = usuario;
        this.contato = contato;
    }

    @Override
    public void exercutar() {
        Contato novoContato = new Contato(null, null, null, null, null);
        try {
            novoContato.setNome(presenter.getView().getTxtNome().getText());
            novoContato.setSobrenome(presenter.getView().getTxtSobrenome().getText());
            novoContato.setTelefone(String.valueOf(presenter.getView().getTxtTelefone().getValue()));
            novoContato.setOperadora(null);
            novoContato.setUf(null);

            //--------------verificaçao da uf e operadora---------------
            novoContato = Operadoras.getInstancia().detectaUfOperadora(novoContato);

            if ((!contato.getNome().equals("")) && (!contato.getSobrenome().equals("")) && (contato.getTelefone() != null)) {
                if (!contato.getTelefone().equals(novoContato.getTelefone())) {
                    if (contatos.verificaContato(novoContato)) {
                        throw new Exception("O contato já existe !!");
                    }
                }
                contatos.editarContato(contato, novoContato);
                contatos.gravarLog("<Edição> do contato <<" + contato.getNome() + ">>,<<" + dataHora.getHora() + ">>,<<" + dataHora.getData()
                        + ">>,<<" + usuario.getNomeUsuario() + ">>.");
                JOptionPane.showMessageDialog(null, novoContato.getNome() + " " + novoContato.getSobrenome() + " Alterado com sucesso!");
                presenter.setEstado(new VisualizacaoState(presenter, novoContato));

            } else {
                throw new IllegalArgumentException("Você precisa informar os campos");
            }
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, ex.getMessage());
            try {
                contatos.gravarLog("Ocorreu a falha:" + ex.getMessage() + "ao realizar <Edição> do contato <<"
                        + contato.getNome() + ">>,<<" + dataHora.getHora() + ">>,<<" + dataHora.getData()
                        + ">>,<<" + usuario.getNomeUsuario() + ">>.");
            } catch (IllegalAccessException ex1) {
                JOptionPane.showMessageDialog(null, ex1.getMessage());
            } catch (InstantiationException ex1) {
                JOptionPane.showMessageDialog(null, ex1.getMessage());
            } catch (ClassNotFoundException ex1) {
                JOptionPane.showMessageDialog(null, ex1.getMessage());
            } catch (IOException ex1) {
                JOptionPane.showMessageDialog(null, ex1.getMessage());
            }
        }
    }

}
